//
//  HykStatus.swift
//  sinaWeiBo
//
//  Created by hyk on 15/12/4.
//  Copyright © 2015年 hyk. All rights reserved.
//

import UIKit

class HykStatus: NSObject {

    /// 微博创建时间
    var created_at: String?
    
    /// 微博ID
    var id: Int = 0
    
    /// 微博信息内容
    var text: String?

    /// 微博来源
    var source: String?
    
    /// 微博 缩略图 图片地址数组: 数组里面存放的是字典
    var pic_urls: [[String: AnyObject]]?
    
    /// 用户模型, 如果不做特殊处理,KVC会将返回数据中的字典赋值给user, 普通的属性使用KVC赋值,如果是user属性,我们拦截,不使用KVC赋值,我们自己来字典转模型,在赋值给 user
    var user: HykUser?
    
    /// 转发数
    var reposts_count: Int = 0
    
    /// 评论数
    var comments_count: Int = 0
    
    /// 表态数(赞)
    var attitudes_count: Int = 0
    
    //字典转模型
    init(dict:[String:AnyObject]) {
        super.init()
        // 有了对象,才能调用对象的方法
        // KVC字典转模型
        setValuesForKeysWithDictionary(dict)
    }
    /// KVC字典转模型时,字典的key在模型中找不到对应的属性时会调用,在这个方法里面可以什么都不做
    override func setValue(value: AnyObject?, forUndefinedKey key: String) { }
    
    override func setValue(value: AnyObject?, forKey key: String) {
        if key == "user" {
            if let dict = value as? [String:AnyObject]{
            
             // 在这里字典转模型, 赋值给user属性
              user = HykUser(dict: dict)
            }
           return
        }
        // 调用父类的方法
        super.setValue(value, forKey: key)
    }
    //对象打印方法
    override var description:String {
       //数组中存放的是需要打印的数据
        let properties = ["created_at","id","text","source","pic_urls","reposts_count","comments_count","attitudes_count","user"]
    
         // 根据传入数组作为字典的key,value会从模型里面自动获取
        return "\n \t 微博模型：\(dictionaryWithValuesForKeys(properties))"
    }
    /// 获取微博数据
    
    /**
    获取微博数据,字典转模型
    
    - parameter finished: 闭包回调, 如果有数据,返回微博模型,失败:error != nil
    */
    
   class func loadStatus(finished: (statuses: [HykStatus]?,error: NSError?) ->()){
        //获取网络工具类
        HykNetworkTool.shardInstance.loadStatus { (result, error) -> () in

            //判断是否错误
            if error != nil || result == nil{
              print("加载数据失败error：\(error)")
                finished(statuses: nil, error: error)
               return
            }
            // 加载到微博数据, 字典转模型
            if let array = result!["statuses"] as? [[String:AnyObject]]{
                // 能到这里面来, statuses 数据是没有问题的
                
                // 创建一个数组来存放转好的模型
               var statuses = [HykStatus]()
                
                 // 遍历数组,获取里面的每一个字典,
                for dict in array {
                    //字典转模型
                    let status = HykStatus(dict: dict)
                    //存放进数组
                    statuses.append(status)
                }
                
               // 字典转模型完成, 告诉调用者,有模型数据
                finished(statuses: statuses, error: nil )
            
            } else {
            
               finished(statuses: nil, error: error)
            }
            
        }
    
    
    
    }
    

}
